package com.nancy.java_design.proxy.demo2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * JDK动态代理
 */
public class ProxyFactory {
    //声明目标对象
    private TranStation tranStation = new TranStation();

    //返回代理对象
    public SellTicks getProxySellTicks(){
        SellTicks proxySellTicks = (SellTicks) Proxy.newProxyInstance(
                //类加载器,用于加载代理对象，可以通过目标对象获取类加载器
                tranStation.getClass().getClassLoader(),
                //目标对象实现的所有接口
                tranStation.getClass().getInterfaces(),

                //代理对象处理器
                new InvocationHandler() {
                    /**
                     * 代理方法
                     * @param proxy 代理对象
                     * @param method 被代理的方法
                     * @param args 方法参数
                     * @return
                     * @throws Throwable
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("代理点收取一定的服务费(JDK动态代理)");
                        Object obj = method.invoke(tranStation, args);
                        return obj;
                    }
                }
        );
        return proxySellTicks;
    }

}
